package com.hsnn.medstgmini.trading.pur.controller;

import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.hsnn.medstgmini.Constants;
import com.hsnn.medstgmini.base.std.model.HospInfo;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.trading.pur.model.PurOrderInfo;
import com.hsnn.medstgmini.trading.pur.model.form.OrderPack;
import com.hsnn.medstgmini.trading.pur.model.form.OrderPackage;
import com.hsnn.medstgmini.trading.pur.service.OrderConfirmManager;
import com.hsnn.medstgmini.trading.pur.service.OrderNotConfirmDteailManager;
import com.hsnn.medstgmini.trading.pur.service.OrderNotConfirmManager;
import com.hsnn.medstgmini.util.Pagination;

/**
 * @category 中心端查看订单明细
 * @author 王立志
 * @date 2016年4月9日
 */
@Controller
@RequestMapping("/noOrderConfirm")
public class OrderNotConfirmController {
	private static final Logger log = Logger.getLogger(OrderNotConfirmController.class);
	
	@Autowired
	private OrderNotConfirmManager orderNotConfirmManager;
	
	@Autowired
	private OrderNotConfirmDteailManager orderNotConfirmDteailManager;
	
	@Autowired
	private OrderConfirmManager orderConfirmManager;
	
	
	@Autowired
	private HttpServletRequest request;
	
	@Autowired
	private HttpSession session;
	
	/**
	 * @category 获取当前登陆人信息
	 * @date 2015年6月14日
	 * @return
	 */
	public SysUser getUser() {
		return (SysUser) session.getAttribute(Constants.USERINFO);
	}
	
	
	/**
	 * 
	 *@category 跳向审核未通过订单信息页面（医疗机构）
	 *@author 林洋
	 *@date 2016年4月10日
	 *@return
	 */
	@RequestMapping("/toNotPassOrder")
	public String toNotPassOrder(){
		return "/trading/pur/notPassOrder";
	}
	/**
	 * 
	 *@category 获取审核未通过订单信息列表数据（医疗机构）
	 *@author 林洋
	 *@date 2016年4月10日 
	 *@return
	 */
	@RequestMapping("/getNotPassOrderList")
	@ResponseBody
	public Pagination getNotPassOrderList(OrderPackage orderPackage){
			log.info("[医疗机构]获取订单信息列表数据:"+orderPackage);
			Pagination page = new Pagination(request);
			try {
				HospInfo hosp = getUser().getInfo();
				orderPackage.setHospCode(hosp.getHospCode());
				page.setForm(orderPackage);
				page = orderNotConfirmManager.getNotPassOrderList(page);
				page.setSuccess(true);
			} catch (Exception e) {
				log.error("",e);
			}
			return page;
	}

	/**
	 * 
	 *@category 删除订单（医疗机构）
	 *@author 林洋
	 *@date 2016年4月10日
	 *@param array
	 *@return
	 */
	@RequestMapping("/orderDelete")
	@ResponseBody
	public Pagination orderDelete(String array){
		log.info("删除审核未通过订单（医疗机构）"+array);
		Pagination page = new Pagination(request);
		if (array != null && !"".equals(array)) {
			Gson gson = new Gson();
			Type type = new TypeToken<List<OrderPack>>() {
			}.getType();
			List<OrderPack> list = gson.fromJson(array, type);
			if (list != null && !list.isEmpty()) {
				try {
					orderNotConfirmManager.delete(list);
					page.setSuccess(true);
				} catch (Exception e) {
					e.printStackTrace();
					page.setSuccess(false);
					page.setMsg("操作失败，请联系管理员！");
					return page;
				}
			}
		}
		return page;
	}
	
	/**
	 * 
	 *@category 提交订单（医疗机构）
	 *@author 林洋
	 *@date 2016年4月10日
	 *@param array
	 *@return
	 */
	@RequestMapping("/orderSubmit")
	@ResponseBody
	public Pagination orderSubmit(String array){
		log.info("提交审核未通过订单（医疗机构）"+array);
		Pagination page = new Pagination(request);
		if (array != null && !"".equals(array)) {
			Gson gson = new Gson();
			Type type = new TypeToken<List<OrderPack>>() {
			}.getType();
			List<OrderPack> list = gson.fromJson(array, type);
			if (list != null && !list.isEmpty()) {
				try {
					orderNotConfirmManager.orderSubmit(list);
					page.setSuccess(true);
				} catch (Exception e) {
					e.printStackTrace();
					page.setSuccess(false);
					page.setMsg("操作失败，请联系管理员！");
					return page;
				}
			}
		}
		return page;
	}
	
	/**
	 * 
	 *@category 跳向审核未通过订单信息页面（医疗机构）
	 *@author 王立志
	 *@date 2016年4月10日
	 *@return
	 */
	@RequestMapping("/toPurOrderNotConfirmDteail")
	
	public String toPurOrderNotConfirmDteai(Model model, String orderPackId, String amount){
		Map<String, Object> map = orderConfirmManager.getOrderPackageById(orderPackId);
		model.addAttribute("orderPackId", orderPackId);
		model.addAttribute("orderPack", map);
		request.setAttribute("amount", amount);
		return "/trading/pur/purOrderNotConfirmDteail";
	}
	/**
	 * 
	 *@category 获取审核未通过订单信息列表数据（医疗机构）
	 *@author 林洋
	 *@date 2016年4月10日 
	 *@return
	 */
	@RequestMapping("/getPurOrderNotConfirmDteail")
	@ResponseBody
	public Pagination getPurOrderNotConfirmDteail(OrderPackage orderPackage){
		log.info("[配送企业]查询订单详细列表："+orderPackage);
		Pagination page = new Pagination(request);
		try {
			orderConfirmManager.getOrderConfirmDetailDel(orderPackage, page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
		}
		return page;
	}
	
	/**
	 * 
	 *@category 删除订单（医疗机构）
	 *@author 林洋
	 *@date 2016年4月10日
	 *@param array
	 *@return
	 */
	@RequestMapping("/orderInfoDelete")
	@ResponseBody
	public Pagination orderInfoDelete(String array){
		log.info("删除审核未通过订单（医疗机构）"+array);
		Pagination page = new Pagination(request);
		if (array != null && !"".equals(array)) {
			Gson gson = new Gson();
			Type type = new TypeToken<List<PurOrderInfo>>() {
			}.getType();
			List<PurOrderInfo> list = gson.fromJson(array, type);
			if (list != null && !list.isEmpty()) {
				try {
					orderNotConfirmManager.orderDelete(list);
					page.setSuccess(true);
				} catch (Exception e) {
					e.printStackTrace();
					page.setSuccess(false);
					page.setMsg("操作失败，请联系管理员！");
					return page;
				}
			}
		}
		return page;
	}
	
	
}